#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
打包PDF水印工具为独立的可执行文件
使用PyInstaller将程序打包成一个单独的.exe文件
"""

import os
import sys
import shutil
import subprocess
import platform

def build_exe():
    """
    构建独立可执行文件
    """
    print("=" * 50)
    print("开始打包PDF批量加水印工具...")
    print("=" * 50)
    
    # 确保安装了必要的依赖
    try:
        import PyPDF2
        import PyInstaller
    except ImportError as e:
        print(f"错误: 缺少必要的依赖库 - {e}")
        print("请先运行: pip install PyPDF2 pyinstaller")
        return False
    
    # 检测操作系统类型
    os_type = platform.system()
    print(f"检测到操作系统: {os_type}")
    
    # 用于打包的文件
    main_file = "pdf_watermarker_gui.py"
    
    # 如果开发环境是Windows，但实际系统不是，需要提醒
    if os_type != "Windows" and os_type != "Darwin":  # 不是Windows也不是macOS
        print("警告: 在非Windows/macOS系统上构建可能不会生成适用于Windows/macOS的可执行文件")
    
    # 构建命令
    cmd = [
        "pyinstaller",
        "--name=PDF水印工具",
        "--onefile",
        "--windowed",  # 无控制台窗口
        "--clean",
        "--noconfirm",
        # 添加所需文件
        "--add-data=README.md:.",
        # 可以添加图标，如果有的话
        # "--icon=icon.ico",
    ]
    
    # 添加主文件
    cmd.append(main_file)
    
    print("\n运行打包命令...")
    print(" ".join(cmd))
    print("-" * 50)
    
    # 执行PyInstaller命令
    try:
        subprocess.run(cmd, check=True)
        print("\n打包完成!")
        
        # 打包后的文件位置
        dist_dir = os.path.join(os.getcwd(), "dist")
        if os_type == "Windows":
            exe_file = os.path.join(dist_dir, "PDF水印工具.exe")
        elif os_type == "Darwin":  # macOS
            exe_file = os.path.join(dist_dir, "PDF水印工具")
        else:  # Linux
            exe_file = os.path.join(dist_dir, "PDF水印工具")
        
        if os.path.exists(exe_file):
            print(f"\n可执行文件已创建: {exe_file}")
            print("\n使用方法:")
            print("1. 双击运行可执行文件")
            print("2. 选择包含PDF文件的文件夹")
            print("3. 确保该文件夹中有名为'watermark.pdf'的水印文件")
            print("4. 点击'开始处理'按钮")
        else:
            print(f"\n警告: 未找到打包后的可执行文件，请检查dist目录")
        
        return True
    
    except Exception as e:
        print(f"\n打包过程中出错: {e}")
        return False

if __name__ == "__main__":
    build_exe() 